export {}
/* 
  联合类型
    - 联合类型允许某个值可以是多种类型中的一种
    - 使用联合类型时只能访问联合类型中共有的属性和方法
    - 如果想访问某个类型独有的属性或方法，需要使用类型守卫或类型的断言
*/

let a: string | number | boolean
a = "hello"
a = 123
a = true

interface Person {
  name: string
  age: number
}

interface Dog {
  age: number
}

let someOne: Person | Dog = { name: "孙悟空", age: 18 }
someOne = { age: 22 }

function fn(personOrDog: Person | Dog) {
  ;(personOrDog as Person).name
  if ("name" in personOrDog) {
    personOrDog.name
  }
}
